package org.eda2;

import static org.junit.Assert.*;
import java.io.File;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;

/**
 * The Class LocalidadGreedyJUnit4. Clase que prueba la realizacion de un
 * segundo filtrado, de los usuarios resultantes del primer filtrado de la
 * practica 1 o la practica 2a, utilizando un Greedy por localidad.
 */

public class LocalidadGreedyJUnit4 {

	/** The input directory. */
	String inputDirectory;

	/** The output directory. */
	String outputDirectory;

	/** The identificador */
	String identificador;

	/**
	 */
	int local;

	@Before
	public void setUp() throws Exception {

		inputDirectory = System.getProperty("user.dir");
		inputDirectory = inputDirectory + File.separator + "src"
				+ File.separator + "org" + File.separator + "eda2"
				+ File.separator + "entradas" + File.separator;

		outputDirectory = System.getProperty("user.dir");
		outputDirectory = outputDirectory + File.separator + "src"
				+ File.separator + "org" + File.separator + "eda2"
				+ File.separator + "salidas" + File.separator;
		identificador = "100"; // Elegimos el fichero previamente creado
								// con'n' usuarios...
		local = 8; // Elegimos la localidad requeridad....
	}

	/**
	 * Test SolucionPractica2b. Test que comprueba el segundo filtrado de
	 * usuarios, mediante el principio de localidad con algoritmo Greedy.
	 */
	@SuppressWarnings("unchecked")
	@Test
	public void testSolucionPractica2b() {
		String inputFile = "datosAleatorios" + identificador + ".txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		ArrayList<User> listaUsuarios = entrada.getUserList();
		Pareto frontera = new Pareto((ArrayList<User>) listaUsuarios.clone());
		ArrayList<User> pareto = frontera.paretoFrontierGreedy();
		LocalidadGreedy localidad = new LocalidadGreedy(listaUsuarios, pareto,
				local);
		ArrayList<User> solucion = localidad.getListaSolucion();
		String outputDirectory1 = outputDirectory + "SolucionGreedyLocalidad"
				+ identificador + "-" + local + ".txt";
		InOut.guardarUsuariosGreedy(solucion, outputDirectory1);
		assertEquals(solucion.size(), listaUsuarios.size() / 200);
	}
}
